﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _3._5._1_按值和按引用传递参数
{
    internal class Program
    {
        static void Main(string[] args)
        {
            A a1 = new A { X = 1 };
            ChangeA(a1);
            Console.WriteLine($"a1.X:{a1.X}");

            //B a2 = new B {  X = 1 };    
            //ChangeB(a2);
            //Console.WriteLine($"a2.X:{a2.X}");


            Console.ReadKey();

        }

        public static void ChangeA(A a)
        {
            a.X = 2;
            //结构按值传递，通过按值传递， ChangeA 方法中的变量a 得到堆栈中变量 a1 的一个副本。在方法ChangeA的最后修改并销毁副本。 a1 的内容从不改变，一直是 1 。
        }


        public struct A
        {
            public int X { get; set; }
        }




        //public class B
        //{
        //    public int X { get; set; }
        //}

        //public static void ChangeB(B b)
        //{
        //    b.X = 3;
        //    //类按引用传递。这样， b 变量把堆上的同一个对象引用为变量a2。 当 ChangeB 修改b 的 X 属性值时，把它改为 a2 . X， 因为它是同一个对象。这里，结果是3。
        //}

    }
}
